﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="MsSqlEmbeddedQueryProducerBase.cs" company="DHGMS Solutions">
//   Copyright 2004-2014 DHGMS Solutions.
//      
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//      
//   http://www.apache.org/licenses/LICENSE-2.0
//      
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
// </copyright>
// <summary>
//   TODO: Update summary.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace Dhgms.TplHelper.Model.DataReaderProducer
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;

    /// <summary>
    /// TODO: Update summary.
    /// </summary>
    public abstract class MsSqlEmbeddedQueryProducerBase<TTaskResult> : MsSqlProducerBase<TTaskResult>
    {
        private readonly string resourceFilename;

        private readonly string resourceNameSpace;

        private readonly Assembly assembly;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="connectionString"></param>
        /// <param name="assembly"></param>
        /// <param name="resourceNameSpace"></param>
        /// <param name="resourceFilename"></param>
        /// <exception cref="ArgumentNullException"></exception>
        protected MsSqlEmbeddedQueryProducerBase(string connectionString, System.Reflection.Assembly assembly, string resourceNameSpace, string resourceFilename)
            : base(connectionString)
        {
            if (assembly == null)
            {
                throw new ArgumentNullException("assembly");
            }

            if (string.IsNullOrWhiteSpace(resourceNameSpace))
            {
                throw new ArgumentNullException("resourceNameSpace");
            }

            if (string.IsNullOrWhiteSpace(resourceFilename))
            {
                throw new ArgumentNullException("resourceFilename");
            }

            this.assembly = assembly;
            this.resourceNameSpace = resourceNameSpace;
            this.resourceFilename = resourceFilename;
        }

        /// <summary>Gets the SQL command.</summary>
        public sealed override string SqlCommand
        {
            get
            {
                return DataManager.Model.Helper.ReflectionExtensions.LoadStringFromResource(this.assembly, this.resourceNameSpace, this.resourceFilename);
            }
        }
    }
}
